مقدمه و معرفی داده

در این پروژه به بررسی شخصیت‌های معروف جهانی می‌پردازیم. برای اطلاعات اشخاص از داده‌ی Pantheon استفاده می‌کنیم. این داده از ویکیپدیا استخراج شده است و شامل اطلاعات تمام افرادی که صفحه‌ی در مورد آن‌ها به حداقل ۲۵ زبان موجود است می‌باشد. این شرط به این معنی است که این‌ها افرادی هستند که در سطح جهان معروف هستند.

اطلاعات حدود ۱۲ هزار نفر از ۳۵۰۰ سال قبل از میلاد تا به امروز که در این شرط صدق می‌کنند در این داده گردآوری و تمیز شده است. در این داده زمینه‌های کاری در ۳ مرحله دسته‌بندی شده‌اند که نفش بسیار مفیدی در تحلیل ما ایفا کردند. این دسته‌بندی به صورت زیر است:

در طی انجام کار برای پرسش دادن به برخی پرسش‌ها از منابع دیگری هم استفاده کردیم. برای پاسخ به پرسش “آیا معروف شدن در آسیا دشوارتر است” از داده‌ی موفقیت‌های بشر استفاده کردیم که به طور کلی انسان‌ها موثر در زمینه‌های مختلف را جمع‌آوری کرده است. همچنین به تحلیل عواطف متن صفحات ویکیپدیای اشخاص نیز پرداخته‌ایم که برای آن به ویکیپدیا رجوع کرده و با crawl کردن داده را استخراج کردیم.

در پروپوزال نوشتیم که می‌خواهیم محبوبیت‌ها در نقاط مختلف جهان را بررسی کنیم. به دلایل فنی اما این کار ممکن نشد. جزئیات بیشتر در بخش مشکلات فنی آمده است.

حاصل این تحلیل‌ها و زحمات، نتایجی بعضا قابل‌توجه و جذابی شده است که در ادامه خواهید دید. در بخش آخر هم به اختصار به تشریح مسائل فنی و مشکلاتی که با آن روبرو شدیم می‌پردازیم.

بررسی مکانی

بررسی کلی

در این بخش سعی می‌کنیم بر روی موقعیت مکانی افراد متمرکز شویم. برای داشتن دید کلی ابتدا با استفاده از طول و عرض جغرافیایی که به دست آوردیم، سعی کردیم یک نمودار تعاملی از موقعیت افراد در گذر زمان به رسم کنیم.

اندازه‌ی نقاط متناسب با HPI که شاخصی برای “بزرگی” فرد (بر اساس بازدید صفحات و زمان تولد) است می‌باشد. در نمودار زیر هم می‌توانید سهم هر کشور در افراد معروف قرون مختلف را ببینید:

نمودار موقعیت مکانی تمام افراد در تمام ادوار هم به شکل زیر است:

مهم‌ترین نکته‌ای که توجه را به خود جلب می‌کند این است که حتی در دورانی که به دوران اوج شرق مشهور است، بیشتر افراد در اروپا قرار دارند. این مسئله کنجکاوی ما را برانگیخت! به دنبال راهی گشتیم تا این مسئله را بررسی کنیم که آیا واقعا تعداد افراد موثر بر جهان در اروپا بیشتر بوده است یا کسانی که در اروپا بودند بیشتر معروف شده‌اند. برای همین سعی کردیم با داده‌ای دیگر به این سوال پاسخ دهیم. با جستجو به داده‌ی موفقیت‌های بشر ) Human Accomplishments ) رسیدیم.

آیا واقعا در آسیا مشهور شدن دشوارتر است؟

برای پاسخ دادن به این پرسش از داده‌ی موفقیت‌های بشر استفاده می‌کنیم.

داده‌ی موفقیت‌های بشر

این داده توسط چارلز موری به عنوان کتاب چاپ و اخیرا به طور رایگان منتشر شده است. موری در این کتاب اطالاعات ۴۰۰۰ مبتکر در زمینه‌های هنر و علم را از ۸۰۰ سال قبل از میلاد مسیح تا سال ۱۹۵۰ را جمع‌آوری کرده است. او همچنین برای افراد یک شاخص نشانگر اهمیت کارهای آن شخص به دست آورده است. برای مشخص کردن افراد و این شاخص او به منابع اصلی هر رشته (دایرة المعارف‌ها، کتب تاریخی و …) و همچنین نظرسنجی‌ها مراجعه کرده است و بر اساس این که منابع چقدر به شخص پرداخته‌اند و در نظرسنجی‌ها چه گفته شده میزان اهمیت کار افراد را پیدا کرده است و ۴۰۰۰ نفر را برگزیده است. خوبی این داده این است که به معروفیت افراد وابستگی کمی دارد و می‌توانیم افرادی را در آن بیابیم که بسیار موثر بوده‌اند ولی معروف نشده‌اند. این به ما کمک می‌کند به سوالی که مطرح کردیم پاسخ بدهیم.

استفاده از این داده و اتصال آن به داده‌ی اصلی زحمات زیادی داشت که در بخش مشکلات فنی آورده شده است. اما بعد از انجام این کار توانستیم فرضیه‌مان را بررسی کنیم. از بین افراد داده‌ی HA افرادی را که در داده‌ی pantheon موجود بودند یعنی به معروفیت رسیده‌اند را جدا کردیم. حال شاخص دهک آخر افراد در هر ناحیه را مقایسه می‌کنیم. به این معنی که نگاه می‌کنیم کسی که در مرز ۱۰ درصد پایینی است چه شاخصی داشته است. هر چه این مقدار بیشتر باشد به این معنی است که افراد آن ناحیه برای معروفیت باید کار مهم‌تری انجام دهند. نتیجه به این صورت است:

می‌بینیم که آسیایی‌ها برای این که در جهان امروز معروف باشند باید به مقدار قابل توجهی کار مهم‌تری کرده باشند!

شغل معروف کشورها

یکی از بررسی‌های جالبی که می‌توان با این داده کرد پیدا کردن شغلی است که بیشترین شهرت را برای هر کشور آورده است. به طور دقیق‌تر، شخصیت‌های کدام شغل بیشترین سهم را در بازدیدهای شخصیت‌های هر کشور داشته‌اند؟ نتیجه را در زیر می‌بینید:

میبینید که در اکثر کشورها سیاستمداران بیشترین سهم را دارند. دلیل این موضوع این است که شخصیتهای تاریخی پربازدید پادشاهان هستند و این کشورها اکثر بازدید خود را از آنها دارند. اما در کشورهایی تفاوتهایی وجود دارد برای مثال در آمریکا و کانادا و استرالیا بازیگران بیشترین بازدید را دارند. شهرت فوتبالیستان از اسپانیا و تعدادی از کشورهای آمریکای جنوبی نیز جالب توجه است. در برخی کشورهای کوچک هم تک شخصیتهای معروف نتیجه را مشخص کردهاند. مانند فدرر برای سوئیس یا چنگیزخان برای مغولستان از این دست هستند.

تحلیل زمانی

آیا واقعا در گذشته مشهور شدن آسان‌تر بوده است؟

بسیاری معتقدند در گذشته معروف شدن آسان‌تر بوده است. این اتفاق معمولا در هنگام مطالعه‌ی موضوعات علمی رخ می‌دهد که می‌بینیم در زمان‌های قدیمی افراد با به دست آوردن نتایجی که به نظر ما آسان به نظر می‌آیند نامشان در تاریخ ثبت شده است. برای بررسی این موضوع تعداد اشخاص معروف در قرون مختلف را بررسی کردیم. همانطور که انتظار داریم این مقدار بیشتر شده است. اما این موضوع برای نتیجه‌گیری کافی نیست زیرا در طی زمان جمعیت هم به طور قابل توجهی بیشتر شده است و باید دید چه کثری از افراد معروف می‌شوند. همین موضوع را بررسی می‌کنیم. تعداد افراد معروف در هر میلیون نفر را به دست می‌آوریم. نتیجه را در زیر می‌بینید:

نتیجه قابل توجه است. این نسبت در طول تاریخ تقریبا ثابت مانده است اما در قرن اخیر ناگهان با گسترش ارتباطات این نسبت جهشی فوق‌العاده داشته است! پس برخلاف تصور این افراد زمان ما بهترین زمان برای معروف شدن است.

سهم قاره‌ها در طی زمان

یکی دیگر از مسائل جالب ظهور و افول قاره‌ها است. همه شنیده‌ایم که آسیا در گذشته مهد علم و تمدن بوده است ولی امروزه اروپا و آمریکا از آن پیشی گرفته‌اند. به بررسی این موضوع می‌پردازیم. سهم هر قاره از اشخاص معروف در طی زمان را در زیر می‌بینید:

نمودار به خودی خود بیانگر درستی این موضوع است. سهم آسیا از ۱۰۰ درصد به شدت کاهش یافته است و اروپا در طی زمان رشد کرده است. در دو قرن اخیر هم آمریکا ناگهان سهمی بزرگی را مال خود کرده است.

زمینه‌های کاری در طی زمان

در هر برهه از تاریخ در یک زمینه‌ی کاری اشخاص بزرگی پدید آمده‌اند. سعی می‌کنیم این تغییرات را بررسی کنیم. برای این کار بررسی می‌کنیم شخصیت‌های کدام زمینه بیشترین سهم را در بازدیدهای شخصیت‌های هر قرن داشته‌اند. نتیجه به این صورت است:

می‌بینیم که سهم institutions که اشخاص مذهبی و سیاسی هستند کمتر و کمتر شده است و در قرون اخیر هنر ناگهان رشد کرده است. برای بررسی دقیق‌تر یک لایه پایین‌تر را بررسی می‌کنیم:

در این نمودار هم کاهش سیاست و مذهب واضح است. موسیقی، سینما و تئاتر بیشترین رشد را در قرون اخیر داشته‌اند.

بررسی عواطف صفحات ویکیپدیا

یکی از کارهای جذاب تحلیل متن صفحه‌ی ویکیپدیای اشخاص است. با استفاده از این می‌توان اطلاعات جالبی در مورد شغل‌ها به دست آورد. تغییرات این عواطف برای اشخاص دوره‌های مختلف هم جالب است. استخراج این داده کار آسانی نبوده است. برای جزئیات این فرایند به بخش فنی مراجعه کنید.

عواطف شغل‌ها

می‌توانیم بررسی کنیم که بار احساسی کلمات صفحات مربوط به اشخاص هر صنعت به چه صورت بوده است. این موضوع در مورد این که آن صنعت به چه صورت است اطلاعاتی به ما می‌دهد. این‌ها احساستی هستند که خواندن درباره‌ی اشخاص آن زمینه به ما منتقل می‌کند. نتایج را در زیر می‌بینید:

از موارد جالب بالا بودن اعتماد در کارهایی مانند علوم کامپیوتر و ریاضی یا بالا بودن پیشدستی در ورزش‌ها است. در ادامه بیشتر این موضوعات را تحلیل می‌کنیم.

در نمودار زیر تنها مثبت یا منفی بودن متن صفحات را بررسی کرده‌ایم:

می‌بینیم که رقص و موسیقی مثبت‌ترین متن‌ها را دارند. حضور علوم کامپیوتر بسیار تعجب‌آور است! از آن طرف قانون‌شکنان و نظامیان منفی‌ترین متن‌ها را دارند.

شغل‌های عواطف

دانستن این که چه شغلی بیشتر از همه دارای یک جنبه‌ی عاطفی خاص است هم جالب است. برای هر جنبه ۳ شغل برتر را پیدا کردیم. نتایج را ببینید و لذت ببرید!

sentiment top1 top2 top3
anger Boxer Mafioso Extremist
anticipation Swimmer Athlete Skater
disgust Pornographic Actor Extremist Physician
fear Extremist Mafioso Military Personnel
joy Composer Game Designer Dancer
negative Wrestler Tennis Player Mafioso
positive Game Designer Anthropologist Sociologist
sadness Tennis Player Snooker Wrestler
surprise Referee Swimmer Magician
trust Mathematician Computer Scientist Lawyer

عواطف در طی زمان

کنجکاو شدیم که این عواطف برای اشخاص دوره‌ها مختلف به چه صورت است. نتیجه را در نمودار زیر ببینید:

اکثر جوانب ثابت بوده‌اند. در این بین مثبت بودن از بقیه تغییرات جذاب‌تری دارد:

می‌بینیم که برای اشخاص قدیمی به طور کلی متن‌ها مثبت‌تر هستند هر چند اخیرا متن‌ها مثبت‌تر شده اند…

بررسی برابری جنسیتی

شغل‌هایی که زنان را معروف می‌کنند

برای بررسی شغل‌ها سهم زنان از افراد معروف هر شغل را بررسی می‌کنیم. نتیجه به این صورت است:

می‌بینیم که model ، pornographic actor و companion بیشترین درصد زنان را دارند.

کشورهایی که زنان بیشتر معروف می‌شوند

سهم زنان را در شخصیت‌های کشورهای مختلف بررسی می‌کنیم. نتیجه به این صورت است:

همانطور که مشاهده می‌کنید در اکثر کشورها مردان بخش بیشتری از شخصیت‌ها را تشکیل می‌دهند. در حقیقت ۸۷ درصد کل افراد این داده مرد هستند!

بررسی بازدیدها

در این بخش بازدیدهای صفحات ویکیپدیا را بررسی می‌کنیم.

بازدید جهانی

مشاغل، صنایع و زمینه‌های پربازدید ویکیپدیای انگلیسی را استخراج کردیم که در زیر قابل مشاهده است:

بازدید فارسی

مشاغل، صنایع و زمینه‌های پربازدید ویکیپدیای انگلیسی را استخراج کردیم که در زیر قابل مشاهده است:

بازدید در طی زمان

یک موضوع دیگر هم که می‌تواند جالب باشد این است که از سال ۲۰۰۸ تا ۲۰۱۳ که بازدید صفحات در داده موجود است، بازدید صنایع مختلف چگونه تغییر کرده است. این تغییرات به شکل زیر است:

افزایش بازدید ورزشکاران در زمان‌های المپیک و جام‌جهانی قابل توجه است!

مسائل فنی و سختی‌ها

فایل‌های پروژه

ساختار فایل‌های پروژه به شکل زیر است:

data
|-- pantheon
|-- HA
|-- generated
    |--HA-PAN_linkage.csv
    |--missingCitiesLocations.csv
    |--pantheon_cleaned.csv
    |--wikipedia
            |--raw/
            |--wikipediaTexts.csv
            |--sentiments.csv
reports
|-- firstReport
|-- finalReport
rscripts
|-- requirements.R
|-- locationFetch.R
|-- data_cleaning.R
|-- HA_linkage.R
|-- locationAnalysis.R
|-- genderAnalaysis.R
|-- sentimentCalculate.R
|-- timeAnalysis.R
|-- visitAnalysis.R
|-- wikipediaAnalysis.R
|-- wikipediaFetch.R
output
|-- (plots)
run_all.R
ReadMe.md
.gitignore
DA_project.Rproj

data: در این پوشه داده‌ها قرار می‌گیرند. Pantheon و HA (که به آن خواهیم پرداخت) داده‌های خام هستند. پوشه‌ی generated شامل داده‌هایی است که از روی داده‌ی خام یا با اجرای یک کد به دست می‌آید.

rscripts: دکدها در این پوشه قرار دارند. فایل requirements.R شامل تمام کتابخانه‌های ضروری برای اجرای کدها است.

output: در این پوشه خروجی کدها برای مثال نمودارها قرار داده می‌شوند. در گزارش‌ها از این فایل‌ها استفاده می‌شود.

reports: گزارش‌ها در این پوشه قرار داده می‌شوند. گزارش تحلیل هر موضوع در گزارشی جدا قرار خواهد گرفت.

run_all.R: این کد تمام کدها را اجرا می‌کند تا گزارش‌ها تولید شوند.

کنترل نسخه

برای کنترل نسخه از github استفاده کردیم. می‌توانید آن را در اینجا مشاهده کنید. با توجه به یک نفری بودن پروژه نیازی به همگام سازی مداوم نسخه‌ی آنلاین نیست و معمولا این نسخه مقداری عقب‌تر است.

تمیزسازی داده

علیرغم این که داده بسیار تمیز بود ولی بازهم برای انجام برخی کارها به تمیزکردن بیشتری نیاز بود. برای همین در ابتدا مدتی به تمیزکردن داده پرداختیم. برای استفاده و هرگونه تحلیلی نیاز داشتیم که برخی مشکلات داده را برطرف کنیم. برای همین در data_cleaning.R به این کار پرداخته‌ایم. اولین مشکل این بود که در داده، برای برخی مقادیر که موجود نبودند، مقدارهایی از قبیل Other و … ذکر شده بود که حل آن ساده بود:

data[data == 'Unknown' | data == 'Other' | data == 'UNK'] = NA

مشکل بعدی عددی نبودن برخی تاریخ‌های تولد بود که با توجه به تعداد کم آن‌ها به سادگی حل شد:

#birthyear
data$birthyear[data$birthyear == '530s'] = 535
data$birthyear[data$birthyear == '1237?'] = 1237
data$birthyear = as.numeric(data$birthyear)

مشکل اصلی اما موجود نبودن مختصات جغرافیایی برای بخش مهمی از داده بود. با توجه به این که افراد در این داده از زمان‌های بسیار دور هستند، محل تولد آن‌ها با توجه به مرزهایی کنونی آنقدر اهمیت ندارد زیرا این مرزها بسیار تفاوت کرده‌اند برای همین داشتن مختصات جغرافیایی نه تنها برای تصویرسازی‌ها مهم است، برای تحلیل‌های جغرافیایی هم حیاتی است. خوشبختانه اسم شهر، یا کشور محل تولد تعداد قابل قبولی از این افراد موجود بود. برای یافتن مختصات جغرافیایی از google maps و پکیج ggmap برای استخراج مختصات استفاده کردیم. که اصلا ساده نبود. علاوه بر محدودیت‌های api که از سرعت می‌کاست و به خطاهای نامربوط منجر می‌شد، تحریم بودن این سرویس هم کار را مشکل کرد. مجبور شدیم برای هر شهر، به طور میانگین ۵ درخواست ارسال کنیم که با توجه به محدودیت‌ها مشکلاتی ایجاد کرد. این فرایند در فایل locationFetch.R انجام می‌شود و نتیجه با نام missingCitiesLocations.csv ذخیره می‌شود:

locationNAs = data %>% filter(is.na(LAT) | is.na(LON))

missingCities = sort(unique(locationNAs$birthcity))
missingCities = missingCities[!is.na(missingCities)]

missingCitiesLocations = data.frame(city = character(), lon = numeric(), lat = numeric())
for(city in missingCities[51:171]) {
  print(which(missingCities == city))
  try = TRUE;
  while(try) {
    tryCatch(
      {
        result = geocode(city, force = T)
        try = FALSE
      },
      warning = function(war) {
        if(str_detect(war, 'OVER_QUERY_LIMIT')) {
          print(war)
          try <<- TRUE
        }
        else {
          print(war)
          try <<- FALSE
          result <<- data.frame(lon = NA, lat = NA)
        }
      })
  }
  row = cbind(as.data.frame(city), result)
  print(row)
  missingCitiesLocations = rbind(missingCitiesLocations, row)
}

write_csv(missingCitiesLocations, 'data/generated/missingCitiesLocations.csv')

در نهایت در data_cleaning.R این مختصات را به داده اضافه کردیم و داده‌ی تمیز شده‌ی نهایی را به نام pantheon_cleaned.csv ذخیره کردیم:

#birth locations
data = data %>%
  group_by(birthcity) %>% 
  mutate(LAT = ifelse(is.na(LAT) & !is.na(birthcity), first(LAT[!is.na(LAT)]), LAT),
         LON = ifelse(is.na(LON) & !is.na(birthcity), first(LON[!is.na(LON)]), LON)
  ) %>% 
  ungroup()
locationNAs = data %>% filter(is.na(LAT) | is.na(LON))
missingCitiesLocation = read_csv('data/generated/missingCitiesLocations.csv')
locationNAs = left_join(
  locationNAs %>% select(-LON, -LAT),  
  missingCitiesLocation %>% rename(birthcity = city, LON = lon, LAT = lat),
  by = 'birthcity'
)
data = rbind(
    data %>% filter(!is.na(LON), !is.na(LAT)),
    locationNAs
  ) %>% 
  arrange(name)
write_csv(data, 'data/generated/pantheon_cleaned.csv')

ارتباط داده‌ی HA با داده‌ی اصلی

برای این که بتوانیم تحلیلی انجام دهیم باید بتوانیم این دو داده را به هم متصل کنیم و سطرهایی که مربوط به یک شخص هستند را پیدا کنیم. این کار با توجه به این که اسم افراد در دو داده به یک صورت نیامده کار آسانی نیست. مخصوصا در داده‌ی موفقیت‌ها ( HA ) اسم افراد به روش‌های مختلفی آمده است. ممکن است در یک داده اسم وسط آمده باشد و در دیگری نیامده باشد، اسم افراد غیرانگلیسی به روش‌های مختلف نوشته شده باشد و…

در ابتدا سعی کردیم از پکیج RecordLinkage استفاده کنیم اما متاسفانه موفق به گرفتن خروجی مناسبی نشدیم. برای همین سعی کردیم خودمان این کار را انجام دهیم.

به دلیل تفاوت‌ها در اسم افراد در دو داده باید سعی کنیم تا حدی این اسامی را به هم شبیه کنیم. برای این کار: نام کوچک و بزرگ را استخراج و با ترتیب درست می‌چسبانیم، حروف غیرانگلیسی را به مشابه انگلیسی آن‌ها تبدیل می‌کنیم، نام‌ها وسط را حذف می‌کنیم و تمام حروف را به کوچک تبدیل می‌کنیم. مرحله‌ی بعدی این است که معیاری برای شباهت اسامی به دست آوریم. مترهای گوناگونی برای این مسئله موجود است که در پکیج stringdist پیاده سازی شده‌اند. مترهای مختلف را آزمایش کردیم و برخی مقالات مربوط به این کار را خواندیم و در نهایت از osa استفاده کردیم. در نهایت باید جفت سطرهایی که مربوط به یک نفر هستند را مشخص می‌کردیم. خوشبختانه در دو داده تاریخ تولد افراد هم موجود بود. با این که منابع مختلف ممکن است برای یک شخص تاریخ‌های متفاوتی ذکر کنند، این اعداد معمولا به هم شبیه هستند. با ترکیبی از این دو عامل و مقداری بررسی دستی، به مرز قابل قبولی رسیدیم. این فرآیند در HA_linkage.R انجام می‌شود و نتیجه را ذخیره می‌کند.

library(readxl)
library(stringr)
library(stringdist)
HA = read_excel('data/HA/HA.xlsx')
comma = HA %>% filter(str_detect(Name, ','))
regular = HA %>% filter(!str_detect(Name, ','))
commaNames = comma$Name %>% 
  str_split_fixed(',', 2) %>% 
  as.data.frame() %>% 
  rename(last = V1, first = V2) %>% 
  mutate(original = comma$Name) %>% 
  mutate(fisrt = str_trim(first, side = 'both'),
         last = str_trim(last, side = 'both')) %>% 
  mutate(reformated = paste(first,last))
comma$Name = commaNames$reformated
HA = rbind(regular, comma) %>% 
  mutate(Name = str_trim(Name, side = 'both')) %>% 
  arrange(Name) 


pantheon = read_csv('data/generated/pantheon_cleaned.csv')

pantheon_sci = pantheon %>% 
  select(pname = name, pbirth = birthyear, en_curid)
HA_unique = HA %>%
  select(Name, Serial, Birth) %>%
  distinct() %>% 
  select(hname = Name, hbirth = Birth, Serial)

to.plain <- function(s) {
  
  # 1 character substitutions
  old1 <- "šžþàáâãäåçćčèéêëìíîïðñòóôõöùúûüý"
  new1 <- "szyaaaaaaccceeeeiiiidnooooouuuuy"
  s1 <- chartr(old1, new1, s)
  
  # 2 character substitutions
  old2 <- c("œ", "ß", "æ", "ø")
  new2 <- c("oe", "ss", "ae", "oe")
  s2 <- s1
  for(i in seq_along(old2)) s2 <- gsub(old2[i], new2[i], s2, fixed = TRUE)
  
  s2
}

standardizeName = function(s) {
  result = str_to_lower(to.plain(s))
  fname = str_extract(result, "^[[:graph:]]+ ")
  fname[is.na(fname)] = ""
  lname = str_extract(result, "[[:graph:]]+$")
  result = paste(fname, lname)
  result = str_trim(result, side = 'both')
  return(result)
}
pantheon_sci = pantheon_sci %>% mutate(pname = standardizeName(pname))
HA_unique = HA_unique %>% mutate(hname = standardizeName(hname))

matchings = expand.grid(
  HA$Serial,
  pantheon_sci$en_curid
)
colnames(matchings) = c('Serial', 'en_curid')
matchings = matchings %>% left_join(pantheon_sci) %>% left_join(HA_unique)
matchings = matchings %>% 
  mutate(birth_dist = abs(hbirth - pbirth)) %>% 
  filter(birth_dist < 30)
matchings = matchings %>%
  mutate(name_dist = stringdist(hname, pname))

matchings = matchings %>% 
  filter(name_dist < 2 | (name_dist == 2 & birth_dist <= 5) | (name_dist == 3 & birth_dist <= 0)) 
matchings = matchings %>% 
  select(Serial, en_curid)

write_csv(matchings, 'HA-PAN_linkage.csv')

استخراج صفحات ویکیپدیا

همانطور که در بخش بررسی عواطف صفحات ویکیپدیا دیدید در بخشی از پروژه به متن صفحات اشخاص نیاز داشتیم. با توجه به این که داده شامل ۱۲ هزار شخص است، فرآیند استخراج این صفحات زمان‌بر و مشکل‌آفرین بود. بعد از آن‌هم متن‌ها باید تحلیل‌می‌شدند. این تحلیل هم مقدار خوبی زمان برد.

استخراج داده‌ی محبوبیت محلی

در پروپوزال آورده بودیم که می‌خواهیم که با gTrends این که هر شخص به چه صورتی در جهان محبوب است را به دست آوریم و محبوبیت اشخاص را هم به طور در نقاط مختلف بررسی کنیم. اما وقتی خواستیم این کار را انجام دهیم متوجه مشکلات آن شدیم. اول این که افراد کشورها اشخاص را به زبان‌ها مختلفی جستجو می‌کنند. با این که اسم اشخاص را به زبان‌های مختلف داشتیم ولی باز هم باید تمام آن‌ها را بررسی می‌کردیم. دوم محدودیت API بود. نمی‌توان بیشتر از ۵ عبارت را با هم مقایسه کرد و برای مقایسه تمام افراد نیاز به تلاش‌های بسیاری است که با توجه به تعداد افراد شدنی نیست. همچنین در بررسی محبوبیت در بخش‌های مختلف، مقدار مطلق داده نمی‌شود. محل با بیشترین جستجو مقدار ۱۰۰ را می‌گیرد. این موضوع هم کار را سخت‌تر می‌کند. البته با تمام این موارد می‌شد با فرض‌هایی کارهایی کرد. اما فرض‌ها آنقدر زیاد بودند که نتایجی که با آن‌ها به دست می‌آمد را زیر سوال می‌بردند. برای همین از این کار صرف نظر کردیم.

رسم نمودار‌های تعاملی

این کار نیازمند یادگیری کار با پلاگین motion برای کتابخانه‌ی highcharter بود که زمان زیادی به دلیل نبود مستند سازی خوب گرفت. همچنین داشتن یک نمودار خوب و ثابت نگه داشتن مقیاس معروفیت در گذر زمان با این که شاید به نظر نیاید وقت زیادی گرفت.